package objetos;

import juego.Escenario;
import movimiento.*;
import objetos.aeronaves.Algo42;
import objetos.proyectiles.Proyectil;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;

/*
 * Clase que modela las caracter�sticas de los objetos no controlados. Un objeto no
 * controlado es cualquier objeto m�vil que tiene un comportamiento predefinido y
 * no recibe comandos por parte del usuario.
 */
public abstract class ObjetoNoControlado extends ObjetoMovil implements
		ObjetoVivo {
	private PatronMovimiento patron;
	private int puntajeOtorgado = 0;

	public void vivir() {
		mover();
		retornarAlCombate();
	}

	public void mover() {
		Posicion posActual = this.getPosicion();
		setPosicion(this.patron.calcularNuevaPosicion(posActual, this
				.getVelocidad()));
	}

	public void colisionConAlgo42(Algo42 algo42) {
		this.destruir();
		algo42.recibirDanio(new Danio(this.getEnergia().getCantidad()));
		algo42.modificarPuntaje(this.puntajeOtorgado);
	}

	@Override
	public void colisionConProyectil(Proyectil bala) {
		super.colisionConProyectil(bala);
		if (this.estaDestruido()) {
			Escenario.getInstance().getActor().modificarPuntaje(
					this.puntajeOtorgado);
		}
	}

	public abstract void retornarAlCombate();

	public PatronMovimiento getPatron() {
		return patron;
	}

	public void setPatron(PatronMovimiento patron) {
		this.patron = patron;
	}

	public int getPuntajeOtorgado() {
		return puntajeOtorgado;
	}

	public void setPuntajeOtorgado(int puntajeOtorgado) {
		this.puntajeOtorgado = puntajeOtorgado;
	}

}
